package com.wangjie;

/**
 * 懒汉式
 * 虽然达到了按需初始化的目的，却带来高并发不安全的问题
 * 加锁 缩小锁的范围 无法解决线程安全问题
 * 原因：由于多个线程来获取实例的时候 堵在了获取锁的那一段
 * 得到锁之后 执行获取实例代码 会产生新的实例
 */
public class Mgr04 {

    private static Mgr04 instance;

    private Mgr04() {
    }

    public static Mgr04 getInstance() {
        if (instance == null) {
            synchronized (Mgr04.class){
                try {
                    Thread.sleep(2000);
                    instance = new Mgr04();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        return instance;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Mgr04.getInstance().hashCode());
                }
            }).start();
        }
    }


}
